<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    var arr = [1, 2, 3];
    var obj = { a: 1, b: 2 };

    // 数组和对象转字符串   => 通过toString和String => 会破坏数据的基本结构
    // console.log(arr.toString(),String(arr));
    // console.log(obj.toString(),String(obj));


    //  能否在保留数组和对象结构的情况下,将其转化为字符串(JOSN)

    // var arr = [1,2,3]; // '[1,2,3]'
    // var obj = {a:1,b:2}; // '{"a":1,"b":2}; 

    // 手搓版 => 麻烦
    // var arrStr = "[" + arr.join(",") + "]";
    // console.log(arrStr);

    // var list = [];
    // for(var key in obj){
    //     var val = obj[key];
    //     list.push(`"${key}":${val}`);
    // }
    // console.log(list);
    // var objStr = "{" + list.join(",") + "}";
    // console.log(1, objStr);


    // JSON对象 (全局对象 window.JSON)
    // JSON.stringify()  接收一个数组/对象,在保留数组和对象结构的情况下,将其转化为字符串(JSON字符串)
    // JSON.parse()  接收一个JSON字符串,解析得到对应的数组和对象
    // console.log(JSON);

    var arr = [1, 2, 3]; // '[1,2,3]'
    var obj = { a: 1, b: 2 }; // '{"a":1,"b":2} 

    // 数组对象转json字符串
    var arrToJSON = JSON.stringify(arr);
    console.log(1, arrToJSON);

    var objToJSON = JSON.stringify(obj);
    console.log(1, objToJSON);


    // 解析JSON字符串 => 数组和对象
    // a. JSON.parse()
    var arr1 = JSON.parse(arrToJSON);
    console.log(arr1);

    var obj1 = JSON.parse(objToJSON);
    console.log(obj1);

    // eval() 

    var arr1 = eval(arrToJSON); // eval('[1,2,3]')
    console.log(arr1);

    var obj1 = eval("(" + objToJSON + ")"); // eval('({"a":1,"b":2})')
    console.log(obj1);


    console.log(arr === arr1, obj === obj1);

    // 应用: 数组/对象的深拷贝
    var arr = [1, 2, 3, [4, 5, 6, [7, 8, 9]]];
    var arr1 = JSON.parse(JSON.stringify(arr));
    console.log(arr, arr1, arr === arr1);








</script>

</html>